package model

import (
	"go.mongodb.org/mongo-driver/bson/primitive"
)

type User struct {
	UId            string `bson:"_id"`    //用户id，对照id 设计文档
	Id             int64  `bson:"id"`     //用户数字id，用户的自增id，与_id对应，可用于查找分页，根据需求与其他字段建立组合索引，unique
	Mid            int64  `bson:"mid"`    //用户中心id
	Name           string `bson:"name"`   //昵称
	Image          string `bson:"image"`  //头像资源id
	Sex            uint8  `bson:"sex"`    //性别
	Cover          string `bson:"cover"`  //封面资源id
	Permit         int64  `bson:"permit"` //权限，二进制确定是否拥有某项权限，默认为1
	JoinGroupNum   int32  `bson:"jgn"`    //加入群的个数
	JoinGroupLimit int32  `bson:"jgnl"`   //加入群数量和申请加入数量的总限制
	ApplyGroupNum  int32  `bson:"agn"`    //申请加群的个数
	FollowUserNum  int32  `bson:"fun"`    //关注人的数量
	FollowGroupNum int32  `bson:"fgn"`    //关注群的数量
	FansNum        int32  `bson:"fans"`   //粉丝数量
	LastLoginTime  int64  `bson:"llt"`    //最后登录的时间戳，毫秒级
	CreateTime     int64  `bson:"ct"`     //注册时间戳，毫秒级
	UpdateTime     int64  `bson:"ut"`     //更新时间戳，毫秒级
}

type UserBase struct {
	UId   string `bson:"_id"`   //用户id，对照id 设计文档
	Mid   int64  `bson:"mid"`   //用户中心id
	Name  string `bson:"name"`  //昵称
	Image string `bson:"image"` //头像资源id
	Sex   uint8  `bson:"sex"`   //性别
}

type UserFollow struct {
	OId        primitive.ObjectID `bson:"_id"`
	Id         int64              `bson:"id"`  //用户关注自增id，单独申请，可用于查找分页，根据需求与其他字段建立组合索引，unique
	UId        string             `bson:"uid"` //用户id
	Fid        string             `bson:"fid"` //被关注人的userid
	CreateTime int64              `bson:"ct"`  //创建时间戳，毫秒级
}

type UserFans struct {
	OId        primitive.ObjectID `bson:"_id"`
	Id         int64              `bson:"id"`  //用户粉丝自增id，单独申请，可用于查找分页，根据需求与其他字段建立组合索引，unique
	UId        string             `bson:"uid"` //用户id
	Fid        string             `bson:"fid"` //粉丝的userid
	CreateTime int64              `bson:"ct"`  //创建时间戳，毫秒级
}

// 评论Model定义
type Comment struct {
	CId          string   `bson:"_id"`   // 评论ID
	Id           int64    `bson:"id"`    // 序列id，用于分页
	PostId       string   `bson:"pid" `  // 评论的资源父ID，一般为post id
	UId          string   `bson:"uid"`   // 发出评论的用户id(mid)_
	ReplyUId     string   `bson:"rpuid"` // 被评论用户的id(mid)
	ReplyCId     string   `bson:"rpcid"` // 回复给哪个评论的评论id,一级评论为空
	ReplyText    string   `bson:"rptxt"` // 被回复的内容
	ParentId     string   `bson:"paid"`  // 评论的父id, 一级评论id的父id为post id, 二级评论的父id为一级评论id
	Level        int      `bson:"lv"`    // 层级，一级评论为1，二级评论为2
	Text         string   `bson:"txt"`   // 回复的内容
	Image        string   `bson:"img"`   // 评论图片的url
	ReplyCnt     int      `bson:"rpc"`   // 当前评论的回复数，如果是二级评论，则对应一级评论的ReplyCnt也要加1
	LikeCnt      int      `bson:"lc"`    // 当前评论的点赞数
	TopReplyList []string `bson:"clst"`  // 二级评论为空，一级评论时为前几条二级评论的CID
	Ct           int64    `bson:"ct"`
	Ut           int64    `bson:"ut"`
}

// 评论Op Model定义
type CommentOp struct {
	OId primitive.ObjectID `bson:"_id"`
	Id  int64              `bson:"id"`  // 自增ID，用于分页
	UId string             `bson:"uid"` // 用户ID
	CId string             `bson:"cid"` // 评论ID
	Op  int                `bson:"op"`  // 操作,1:发布，2:回复
	Ct  int64              `bson:"ct"`  // 创建时间戳
}

type UserPostOp struct {
	Id         int64  `bson:"id"`    //用户操作资源自增id，单独申请，可用于查找分页，根据需求与其他字段建立组合索引，unique
	UId        string `bson:"uid"`   //用户id，与pid, op组合索引，唯一
	PId        string `bson:"pid"`   //资源ID
	BId        string `bson:"bid"`   //归属ID
	Op         int    `bson:"op"`    //操作
	Attribute  int    `bson:"attri"` //属性
	CreateTime int64  `bson:"ct"`    //创建时间戳
}
